# 导入必要的库和模块
import gradio as gr
import tensorflow as tf
import numpy as np
from PIL import Image
import h5py

# 使用h5py库加载模型
with h5py.File('best_mlp_model.h5', 'r') as f:
    model = tf.keras.models.load_model(f)

# 定义预处理函数，将输入图像转换为模型可以接受的格式
def preprocess(image):
    image = Image.fromarray(image)  # 将数组转换为图像对象
    image = image.resize((8, 8)).convert('L')  # 调整图像大小并转换为灰度图像
    image_array = np.array(image)  # 将图像转换为numpy数组
    flattened_image = image_array.ravel()  # 将图像数组展平为一维数组
    return flattened_image

# 定义预测函数，使用MLP模型进行预测
def predict(image):
    preprocessed_image = preprocess(image)  # 预处理输入的图像
    preprocessed_image = preprocessed_image.reshape(1, -1)  # 为输入数据添加一个维度以匹配模型的输入形状
    predicted_digit = model.predict(preprocessed_image)  # 使用MLP模型进行预测
    return str(np.argmax(predicted_digit))  # 返回预测的数字

# 创建Gradio接口，这个接口将用于用户输入和显示预测结果
iface = gr.Interface(fn=predict, inputs='sketchpad', outputs='label')

# 启动Gradio接口，用户可以通过这个接口进行交互
iface.launch()